Guice-এ Provider Methods তৈরি করা একটি শক্তিশালী কৌশল, যা আপনাকে কাস্টম ডিপেনডেন্সি ইনজেকশন প্রদান করতে সাহায্য করে। Guice-এ Provider হল এমন একটি অবজেক্ট যা নির্দিষ্ট ডিপেনডেন্সি ইনস্ট্যান্স তৈরি করে এবং এটি ইনজেক্ট করা হয়।
Provider Methods কী?
Guice-এ Provider Method একটি পদ্ধতি যা একটি নির্দিষ্ট ক্লাস বা ডিপেনডেন্সির ইনস্ট্যান্স প্রদান করে। এটি ব্যবহার করে আপনি ডিপেনডেন্সি ইনজেকশন কনট্রোল করতে পারেন এবং নির্দিষ্ট সময়ে অথবা বিশেষ শর্তে ডিপেনডেন্সি প্রদান করতে পারেন। এই পদ্ধতিতে, Guice আপনার ডিপেনডেন্সি তৈরি করার জন্য Provider<T> এর মতো একটি কাস্টম ক্লাস ব্যবহার করে।
Provider Method তৈরি করা
1. Provider ইন্টারফেস ব্যবহার করা
Guice-এর Provider ইন্টারফেস একটি জেনেরিক ইন্টারফেস যা একটি ইনস্ট্যান্স প্রদান করে। আপনি এই ইন্টারফেস ব্যবহার করে একটি কাস্টম প্রোভাইডার মেথড তৈরি করতে পারেন। এই পদ্ধতিতে, Provider.get() মেথডটি ব্যবহার করে ডিপেনডেন্সি ইনস্ট্যান্স প্রদান করা হয়।
Example:
import com.google.inject.Inject;
import com.google.inject.Provider;
public class MyService {
private final MyDatabaseConnection dbConnection;
@Inject
public MyService(Provider<MyDatabaseConnection> dbConnectionProvider) {
// `Provider.get()` ব্যবহার করে ডিপেনডেন্সি ইনস্ট্যান্স পাওয়া যায়
this.dbConnection = dbConnectionProvider.get();
}
public void execute() {
dbConnection.connect();
System.out.println("Service is executed!");
}
}
public class MyDatabaseConnection {
public void connect() {
System.out.println("Database connected!");
}
}
এখানে, MyService-এর কনস্ট্রাক্টর Provider<MyDatabaseConnection> গ্রহণ করছে, যা MyDatabaseConnection ক্লাসের একটি ইনস্ট্যান্স প্রদান করে।
2. Provider Method তৈরি করা
Guice-এ Provider Method ব্যবহার করতে হলে, আপনাকে একটি মেথড তৈরি করতে হবে যা ডিপেনডেন্সি প্রদান করবে।
import com.google.inject.AbstractModule;
import com.google.inject.Provider;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(MyService.class).to(MyServiceImpl.class);
}
// কাস্টম প্রোভাইডার মেথড
public Provider<MyDatabaseConnection> provideDatabaseConnection() {
return new Provider<MyDatabaseConnection>() {
@Override
public MyDatabaseConnection get() {
return new MyDatabaseConnection(); // ডিপেনডেন্সি ইনস্ট্যান্স তৈরি হচ্ছে
}
};
}
}
এখানে, provideDatabaseConnection() একটি কাস্টম Provider Method যা MyDatabaseConnection এর একটি ইনস্ট্যান্স প্রদান করে। আপনি Provider.get() ব্যবহার করে ডিপেনডেন্সি ইনজেক্ট করতে পারবেন।
3. Guice Injector ব্যবহার করা
এখন আপনি Guice Injector ব্যবহার করে ডিপেনডেন্সি ইনজেকশন করতে পারেন।
import com.google.inject.Guice;
import com.google.inject.Injector;
public class MainApp {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
MyService myService = injector.getInstance(MyService.class);
myService.execute(); // Output: Database connected! Service is executed!
}
}
এখানে, Guice.createInjector(new MyModule()) ব্যবহার করে MyService-এর ইনস্ট্যান্স তৈরি করা হয়েছে, এবং Guice নিশ্চিত করেছে যে MyDatabaseConnection সঠিকভাবে ইনজেক্ট করা হয়েছে।
@Provides অ্যানোটেশন ব্যবহার করা
একইভাবে, আপনি Guice-এর @Provides অ্যানোটেশনও ব্যবহার করতে পারেন। এটি Guice-এ কাস্টম প্রোভাইডার মেথড তৈরি করার আরও একটি সহজ উপায়।
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
// অন্যান্য কনফিগারেশন
}
@Provides
@Singleton
public MyDatabaseConnection provideDatabaseConnection() {
return new MyDatabaseConnection();
}
}
এখানে, @Provides অ্যানোটেশনটি Guice-কে বলে যে এটি MyDatabaseConnection ক্লাসের একটি প্রোভাইডার মেথড। এটি যখন MyDatabaseConnection এর ইনস্ট্যান্স ইনজেক্ট করতে চায়, তখন এটি এই মেথডটি ব্যবহার করবে।
@Provides এবং Provider-এর মধ্যে পার্থক্য
@Provides:- এটি Guice-এ সরাসরি মেথড অ্যাটাচ করা হয় যা নির্দিষ্ট ডিপেনডেন্সি প্রদান করে।
@Providesঅ্যানোটেশন ব্যবহার করলে Guice নিজে থেকে এই মেথডটি চিহ্নিত করে এবং আপনার জন্য এটি কল করবে।
Provider:- এটি ক্লাস লেভেলে ব্যবহার করা হয়, যেখানে আপনি ইন্টারফেস এবং প্রোভাইডারের কাস্টম ইমপ্লিমেন্টেশন তৈরি করেন।
Provider.get()মেথড ব্যবহার করে ইনস্ট্যান্স তৈরি করা হয়।
Provider Methods এর ব্যবহারিক উপকারিতা
- Lazy Initialization (বিলম্বিত ইনস্ট্যান্স তৈরি):
Provider-এর মাধ্যমে আপনি lazy initialization অর্জন করতে পারেন। অর্থাৎ, ডিপেনডেন্সি তখনই তৈরি হবে যখন সেটি আসলেই প্রয়োজন হবে।
- Scoped Objects:
- আপনি
Providerব্যবহার করে Scoped ডিপেনডেন্সি তৈরি করতে পারেন, যেমন সিঙ্গেলটন বা প্রোটোটাইপ ইনস্ট্যান্স।
- আপনি
- Conditional Injection:
- কখনো কখনো ডিপেনডেন্সি ইনজেকশন শর্তাধীন হতে পারে, যেখানে আপনি একটি
Providerমেথড ব্যবহার করে কন্ডিশনাল ইনজেকশন করতে পারেন।
- কখনো কখনো ডিপেনডেন্সি ইনজেকশন শর্তাধীন হতে পারে, যেখানে আপনি একটি
Guice-এ Provider Methods এবং @Provides অ্যানোটেশন ব্যবহার করে আপনি কাস্টম ডিপেনডেন্সি ইনজেকশন তৈরি করতে পারেন এবং ডিপেনডেন্সি সৃষ্টির প্রক্রিয়াকে আরও ফ্লেক্সিবল এবং কনফিগারেবল করতে পারেন। এটি আপনাকে ডিপেনডেন্সি ইনজেকশনের সময় পূর্ণ নিয়ন্ত্রণ প্রদান করে এবং অ্যাপ্লিকেশনের কার্যক্ষমতা ও স্কেলেবিলিটি উন্নত করতে সাহায্য করে।
Read more